﻿using System;
using System.Collections.Generic;
using System.ServiceModel;

using SBPweb.PROvibe.Server.Library.Contracts;
using SBPweb.PROvibe.Shared.Library.Components;

namespace SBPweb.PROvibe.Server.Library.Services
{

    [ServiceContract(Namespace = Constants.Services.CoreNamespace)]
    [ServiceKnownType(typeof(Suite))]
    [ServiceKnownType(typeof(Module))]
    [ServiceKnownType(typeof(ServerModule))]
    [ServiceKnownType(typeof(ClientModule))]
    public interface IConfigurationProviderService : IService
    {

        [OperationContract]
        ICollection<Suite> EnumerateAllSuites();

        [OperationContract]
        ICollection<Module> EnumerateAllModules();

        [OperationContract]
        ICollection<ServerModule> EnumerateAllServerModules();

        [OperationContract]
        ICollection<ClientModule> EnumerateAllClientModules();

        [OperationContract]
        ICollection<Module> EnumerateModulesOfSuite(Suite suite);

        [OperationContract]
        ICollection<ServerModule> EnumerateServerModulesOfSuite(Suite suite);

        [OperationContract]
        ICollection<ClientModule> EnumerateClientModulesOfSuite(Suite suite);


        [OperationContract]
        Suite GetCurrentSuite();

        [OperationContract]
        void SetCurrentSuite(Suite suite);
        
    }

}